'''

合并几个csv文件

'''

import os
import pandas as pd


def merge_csv_range(source_dir, target_dir, start_idx, end_idx):
    """
    合并指定范围内的CSV文件
    参数：
    source_dir: 源文件夹路径
    target_dir: 目标文件夹路径
    start_idx: 起始文件索引（从0开始）
    end_idx: 结束文件索引（包含该文件）
    """
    # 获取所有CSV文件（保持系统原始顺序）
    all_files = [f for f in os.listdir(source_dir) if f.endswith('.csv')]

    # 验证索引有效性
    if not all_files:
        raise ValueError("源文件夹中没有CSV文件")
    if start_idx < 0 or end_idx >= len(all_files) or start_idx > end_idx:
        raise ValueError(f"无效索引范围：有效范围为0-{len(all_files) - 1}")

    # 创建目标目录
    os.makedirs(target_dir, exist_ok=True)

    # 合并文件
    combined_df = pd.DataFrame()
    for i in range(start_idx, end_idx + 1):
        file_path = os.path.join(source_dir, all_files[i])
        # 尝试不同的编码格式读取文件
        try:
            # 先尝试utf-8编码
            df = pd.read_csv(file_path, encoding='utf-8')
        except UnicodeDecodeError:
            try:
                # 如果utf-8失败，尝试gbk编码
                df = pd.read_csv(file_path, encoding='gbk')
            except UnicodeDecodeError:
                try:
                    # 如果gbk失败，尝试gb2312编码
                    df = pd.read_csv(file_path, encoding='gb2312')
                except UnicodeDecodeError:
                    # 如果所有编码都失败，尝试带错误忽略的utf-8
                    df = pd.read_csv(file_path, encoding='utf-8', errors='ignore')

        combined_df = pd.concat([combined_df, df], ignore_index=True)

    # 保存结果，使用utf-8-sig编码确保Excel等软件正确显示中文
    output_path = os.path.join(target_dir, "A1_6month.csv")
    combined_df.to_csv(output_path, index=False, encoding='utf-8-sig')
    return output_path  # 返回生成的文件路径


try:
    result_path = merge_csv_range(
        source_dir=r'F:\dataset\BQW_min\Group\A1_new',
        target_dir=r'F:\dataset\BQW_min\data_min',
        start_idx=0,  # 第一个文件
        end_idx=5 # 第n个文件（包含）
    )
    print(f"文件已合并至：{result_path}")
except Exception as e:
    print(f"合并失败：{str(e)}")